home *** CD-ROM | disk | FTP | other *** search
/ Compendium Deluxe 2 / LSD and 17bit Compendium Deluxe - Volume II.iso / a / prog / asmsrc / lsdminitrain.lha / mini_trainer.s next >
Text File  |  1989-08-11  |  10KB  |  561 lines

  1.      Section Copperlist,code_C
  2.  
  3.     opt    c-
  4.  
  5.     move.l    #screenlen,d0
  6.     move.l    #screen,a0
  7. clear:
  8.     move.l    #0,(a0)+
  9.     sub.l    #4,d0
  10.     bpl.s    clear
  11.  
  12.     move.l  4.w,a6        ; open graphics lib
  13.     jsr     -$84(a6)    ; suspend all current tasks
  14.     lea    glib,a1
  15.     moveq    #0,d0
  16.     move.l    4.w,a6
  17.     jsr    -$228(a6)
  18.     tst    d0
  19.     beq    error
  20.     move.l    D0,graphics    ; store address of graphics lib
  21.  
  22.     lea    dlib,a1
  23.     moveq    #0,d0
  24.     move.l    4.w,a6
  25.     jsr    -$228(a6)
  26.     tst    d0
  27.     beq    error
  28.     move.l    d0,dos
  29.         
  30.     move.l    #Screen,d0    ; store address of bitplane0
  31.     move.w    d0,bitplane0_lo    ; into the copper list
  32.     swap    d0
  33.     move.w    d0,bitplane0_hi
  34.         
  35.     lea    text,a1
  36.     move.l    graphics,a6
  37.     add.l    #$32,a6
  38.     move.w    #$80,$dff096        ; dma control write
  39.     move.l    (a6),old_copper        ; store the address of the
  40.     move.l    #my_copper,(a6)        ; old copperlist
  41.     move.w    #$8080,$dff096        ; dma control write
  42.     move.w    #$8010,$dff09a        ; interupt enable bits
  43.     move.l    $6c.w,old_interupt    ; store old level 3 int
  44.     move.l    #new_interupt,$6c.w    ; store my routine
  45.  
  46.     jsr    setup_screen
  47.     move.w    #0,mini_scroll1
  48.     move.w    #0,mini_scroll2
  49.     
  50.     move.l    #16,$100
  51. loopy:    jsr    do_scrolling_menus
  52.     sub.l    #1,$100
  53.     bpl.s    loopy
  54.         
  55.     move.w    #(default-1)*16*256,$dff036
  56.     bchg    #1,$bfe001        ; ? clear mouse button
  57.  
  58. mouse:    btst    #6,$bfe001
  59.     bne.s    mouse            ; wait for lmb
  60.  
  61.     bchg    #1,$bfe001
  62.     
  63.     move.l    old_interupt,$6c.w    ; resore old level 3 int
  64.     move.l    #$10,$dff09a         ; Disable Level 3 Interupt
  65.     move.l    graphics,a6
  66.     add.l    #$32,a6
  67.     move.w    #$0080,$dff096
  68.     move.l    old_copper,(a6)        ; restore old copper list
  69.     move.w    #$8080,$dff096
  70.     move.l    graphics,a1
  71.     move.l    4.w,a6
  72.     jsr    -$19e(a6)
  73.     move.l    4.w,a6
  74.     jsr    -138(a6)
  75.     
  76.     move.w    ypos,d0
  77.     mulu    #4,d0
  78.     move.l    d0,a0
  79.     lea    runtable,a1
  80.     adda.l    a1,a0
  81.     move.l    (a0),a1
  82.  
  83. run_again:    
  84.     move.b    (a1),d0
  85.     beq.s    error
  86.     move.l    dos,a6
  87.     move.l    a1,d1
  88.     clr    d2
  89.     clr    d3
  90.  
  91.     movem.l    d0-d7/a0-a6,-(sp)
  92.     jsr    -$de(a6)
  93.     movem.l    (sp)+,d0-d7/a0-a6    
  94.  
  95. next_run:
  96.     move.b    (a1)+,d0
  97.     bne.s    next_run
  98.     bra.s    run_again
  99.  
  100. Error:    moveq    #0,d0            
  101.     rts
  102.  
  103. wait_button:
  104.  
  105. mouse2:    btst.b    #6,$bfe001
  106.     beq.s    mouse2
  107.  
  108. mouse3:    btst.b    #6,$bfe001
  109.     bne.s    mouse3
  110.     
  111.     rts
  112.  
  113.  
  114.  
  115. new_interupt:
  116.     movem.l    d0-d7/a0-a6,-(sp)
  117.     
  118.     and.w    #$10,$dff01e
  119.     beq    no_music
  120.     move.w    #$10,$dff09c
  121.     
  122. skip:
  123.  
  124.     move.w    #0,mini_colour1
  125.     move.w    #0,mini_colour2
  126.     
  127.     move.w    $dff00a,d0
  128.     lsr.w    #8,d0
  129.     divu    #divider,d0
  130.     cmp.w    #max,d0
  131.     blt.s    mousey_ok
  132.     cmp.w    #6,d0
  133.     bgt.s    neg_mouse
  134.  
  135.     move.w    #(max-1)*divider*256,$dff036
  136.     move.w    ypos,d0
  137.     bra.s    mousey_ok    
  138.     
  139. neg_mouse:
  140.     move.w    #0,$dff036
  141.     move.w    #0,d0
  142.     
  143. mousey_ok:
  144.     
  145.     move.w    d0,ypos
  146.     mulu    #4,d0
  147.     move.l    d0,a0
  148.     lea    lookup,a1
  149.     adda.l    a1,a0
  150.     
  151.     move.l    (a0),a1
  152.     move.w    #barcolour,(a1)
  153.     
  154. wait_irq:
  155. sine_ok:
  156.  
  157.  
  158.     
  159. no_music:
  160.     movem.l    (sp)+,d0-d7/a0-a6    
  161.     dc.w    $4ef9            ; jmp
  162. old_interupt:    dc.l    0        ; the old int lev 3
  163.  
  164.  
  165. do_blit:
  166.     btst.b    #6,$dff002
  167.     Bne.s    do_blit
  168.     rts
  169.  
  170. setup_screen:
  171.  
  172.     lea    mes1,a1
  173.     move.w    #0,d7
  174.     move.l    #screen+(01*46)+2,a2
  175.     jsr    blit_message
  176.  
  177.     move.w    #0,d7
  178.     move.l    #screen+(20*46)+2,a2
  179.     jsr    blit_message
  180.  
  181.     rts
  182.     
  183. blit_message:
  184.     move.l    a1,a6
  185.     add.l    #3,a2
  186.     clr.b    d0
  187.     move.l    #2,d1
  188.     
  189.     
  190.     
  191. blit_message_loop1:
  192.     add.l    #1,d1
  193.     move.b    (a6),d0
  194.     addq    #1,a6
  195.     cmp.b    #0,d0
  196.     bne.s    blit_message_loop1
  197.  
  198.     move.w    d1,d7
  199.     and.w    #1,d7
  200.     mulu    #8192*4,d7
  201.     
  202.     move.l    #23,a6
  203.     sub.l    d1,a6
  204.     add.l    a6,a2
  205.     
  206.  
  207. cont_blit_message:
  208.     clr.w    d0
  209.     lea    font,a0
  210.     move.b    (a1),d0
  211.     add.l    #1,a1
  212.     cmp.b    #0,d0
  213.     bne.s    mess_is_ok
  214.     
  215.     rts
  216.     
  217.     
  218. mess_is_ok:
  219.     sub    #32,d0
  220.     mulu    #32,d0
  221.     add    d0,a0
  222.     
  223.     Move.l    a2,$dff054        ; dest mem d
  224.     Move.l    a0,$dff050        ; source mem a
  225.     move.l    a2,$dff048        ; source mem c
  226.     Move.w    #$ffff,$dff044        ; blit 1st word mask source a
  227.     move.w    #$0000,$dff046        ; blit last word mask source a
  228.     move.w    #-2,$dff064        ; blit modulo for source a
  229.     move.w    #42,$dff060        ; blit modulo for source c    
  230.     or.w    #(%1011*256)+$fa,d7
  231.     move.w    d7,$dff040        ; blit cont reg 0
  232.     move.w    #0,$dff042        ; blit cont reg 1
  233.     Move.w    #42,$dff066        ; modulo for dest
  234.     Move.w    #(16*64)+2,$dff058    ; blit height,width
  235.  
  236.     jsr    do_blit
  237.     
  238.     add.l    #2,a2
  239.     bra    cont_blit_message
  240.     
  241.  
  242. tadd    equ    230*46
  243.  
  244. scroll_text:
  245.     RTS
  246.  
  247. do_scrolling_menus:
  248.  
  249.     lea    mini_scroll1,a0
  250.     move.l    scrollpoint1,a1
  251.     move.l    #screen+(58*46),a2
  252.     lea    scrollpoint1,a3
  253.     lea    scroller1,a4
  254.     
  255.     jsr    update_menus
  256.  
  257.     lea    mini_scroll2,a0
  258.     move.l    scrollpoint2,a1
  259.     move.l    #screen+(78*46),a2
  260.     lea    scrollpoint2,a3
  261.     lea    scroller2,a4
  262.     
  263.     jsr    update_menus
  264.     
  265.     rts
  266.     
  267. scroller_is_ok:
  268.     move.w    d7,(a0)
  269.     rts
  270.     
  271. update_menus:
  272.  
  273.     move.l    a2,a5
  274.     move.l    a2,a6
  275.     add.l    #2,a6
  276.     
  277.     Move.l    a5,$dff054        ; dest mem
  278.     Move.l    a6,$dff050        ; source mem
  279.     Move.w    #$ffff,$dff044
  280.     move.w    #$ffff,$dff046
  281.     move.l    #0,$dff064        ; blit modulo for source a
  282.     Move.w    #%100111110000,$dff040    ; blit cont reg 0
  283.     move.w    #0,$dff042        ; blit cont reg 1
  284.     Move.w    #0,$dff066        ; modulo for dest
  285.     Move.w    #(44*64)+8,$dff058    ; blit width,height
  286.     jsr    do_blit
  287.     
  288.     clr.w    d0
  289.     lea    font,a0
  290.     move.b    (a1),d0
  291.     addq.l    #1,(a3)
  292.     cmp.b    #0,d0
  293.     bne.s    ascii_is_ok2
  294.     move.l    a4,(a3)
  295.     move.l    #32,d0
  296.     
  297. ascii_is_ok2:
  298.     sub    #32,d0
  299.     mulu    #32,d0
  300.     add    d0,a0
  301.     
  302.     move.l    a2,a6
  303.     add.l    #44,a6
  304.     
  305.     Move.l    a6,$dff054    ; dest mem
  306.     Move.l    a0,$dff050        ; source mem
  307.     Move.l    #$ffffffff,$dff044    ; blit mask source a
  308.     move.l    #1,$dff064        ; blit modulo for source a
  309.     Move.w    #%100111110000,$dff040    ; blit cont reg 0
  310.     move.w    #0,$dff042        ; blit cont reg 1
  311.     Move.w    #44,$dff066        ; modulo for dest
  312.     Move.w    #%0000010000000001,$dff058    ; blit width,height
  313.     ;     [hhhhhhhhhhwwwwww] 
  314.  
  315.     jsr    do_blit
  316.  
  317.     rts
  318.  
  319.     
  320.     
  321.     Section    copdat,Data_c
  322.  
  323.  
  324. scrollpoint1:    dc.l    scroller1
  325. scrollpoint2:    dc.l    scroller2
  326.  
  327. sine_list:
  328.     dc.w    43
  329.     dc.w    48
  330.     dc.w    54
  331.     dc.w    60
  332.     dc.w    65
  333.     dc.w    70
  334.     dc.w    74
  335.     dc.w    78
  336.     dc.w    81
  337.     dc.w    83
  338.     dc.w    85
  339.     dc.w    85
  340.     dc.w    85
  341.     dc.w    84
  342.     dc.w    82
  343.     dc.w    80
  344.     dc.w    76
  345.     dc.w    72
  346.     dc.w    68
  347.     dc.w    63
  348.     dc.w    57
  349.     dc.w    51
  350.     dc.w    45
  351.     dc.w    40
  352.     dc.w    34
  353.     dc.w    28
  354.     dc.w    22
  355.     dc.w    17
  356.     dc.w    13
  357.     dc.w    9
  358.     dc.w    5
  359.     dc.w    3
  360.     dc.w    1
  361.     dc.w    0
  362.     dc.w    0
  363.     dc.w    0
  364.     dc.w    2
  365.     dc.w    4
  366.     dc.w    7
  367.     dc.w    11
  368.     dc.w    15
  369.     dc.w    20
  370.     dc.w    25
  371.     dc.w    31
  372.     dc.w    37
  373. sine_end:    
  374.  
  375.  
  376. old_copper:    dc.l    0
  377.  
  378.     even
  379.     
  380. my_copper:    dc.w    $100,$1200    ; 1 bp - lores - 
  381.         dc.w    $104,$a        ; bp control reg
  382.         dc.w    $108,0        ; bp modulo - odd
  383.         dc.w    $10a,0        ; bp modulo - even
  384.         dc.w    $180,0
  385.         dc.w    $102,0
  386.         
  387.         dc.w    $120,0,$122,0
  388.     
  389.         dc.w    $092,$28    ; bp start horz
  390.         dc.w    $094,$d8    ; bp stop horz
  391.         dc.w    $08e,$2c72    ; bp window start left
  392.         dc.w    $090,$2cc6    ; bp window bot right
  393.         
  394.         dc.w    $0e0        ; bp 1 address hi-byte
  395. bitplane0_hi:    dc.w    0
  396.         dc.w    $e2        ; bp 1 address
  397. bitplane0_lo:    dc.w    0
  398.         
  399.         dc.w    $2aff,$ff00,$180,$fff,$2bff,$ff00,$180,titlebg
  400.         dc.w    $102,0
  401.         dc.w    $2dff,$ff00,$182,$880
  402.         dc.w    $2eff,$ff00,$182,$990
  403.         dc.w    $2fff,$ff00,$182,$aa0
  404.         dc.w    $30ff,$ff00,$182,$bb0
  405.         dc.w    $31ff,$ff00,$182,$cc0
  406.         dc.w    $32ff,$ff00,$182,$dd0
  407.         dc.w    $33ff,$ff00,$182,$ee0
  408.         dc.w    $34ff,$ff00,$182,$ff0
  409.         dc.w    $35ff,$ff00,$182,$ee0
  410.         dc.w    $36ff,$ff00,$182,$dd0
  411.         dc.w    $37ff,$ff00,$182,$cc0
  412.         dc.w    $38ff,$ff00,$182,$bb0
  413.         dc.w    $39ff,$ff00,$182,$aa0
  414.         dc.w    $3aff,$ff00,$182,$990
  415.         dc.w    $3bff,$ff00,$182,$880
  416.         dc.w    $3cff,$ff00,$182,$770
  417.         dc.w    $3dff,$ff00,$182,$ff0
  418.  
  419.         dc.w    $102,0
  420.         dc.w    $40ff,$ff00,$182,$880
  421.         dc.w    $41ff,$ff00,$182,$990
  422.         dc.w    $42ff,$ff00,$182,$aa0
  423.         dc.w    $43ff,$ff00,$182,$bb0
  424.         dc.w    $44ff,$ff00,$182,$cc0
  425.         dc.w    $45ff,$ff00,$182,$dd0
  426.         dc.w    $46ff,$ff00,$182,$ee0
  427.         dc.w    $47ff,$ff00,$182,$ff0
  428.         dc.w    $48ff,$ff00,$182,$ee0
  429.         dc.w    $49ff,$ff00,$182,$dd0
  430.         dc.w    $4aff,$ff00,$182,$cc0
  431.         dc.w    $4bff,$ff00,$182,$bb0
  432.         dc.w    $4cff,$ff00,$182,$aa0
  433.         dc.w    $4dff,$ff00,$182,$990
  434.         dc.w    $4eff,$ff00,$182,$880
  435.         dc.w    $4fff,$ff00,$182,$770
  436.         
  437.         
  438.         
  439.         dc.w    $51ff,$ff00,$180,$fff,$52ff,$ff00,$180,$000
  440.         dc.w    $102
  441. mini_scroll1:    dc.w    0
  442.         
  443.         dc.w    $65ff,$ff00,$182,$880
  444.         dc.w    $180
  445. mini_colour1:    dc.w    $fff
  446.         
  447.         dc.w    $66ff,$ff00,$182,$990
  448.         dc.w    $67ff,$ff00,$182,$aa0
  449.         dc.w    $68ff,$ff00,$182,$bb0
  450.         dc.w    $69ff,$ff00,$182,$cc0
  451.         dc.w    $6aff,$ff00,$182,$dd0
  452.         dc.w    $6bff,$ff00,$182,$ee0
  453.         dc.w    $6cff,$ff00,$182,$ff0
  454.         dc.w    $6dff,$ff00,$182,$ee0
  455.         dc.w    $6eff,$ff00,$182,$dd0
  456.         dc.w    $6fff,$ff00,$182,$cc0
  457.         dc.w    $70ff,$ff00,$182,$bb0
  458.         dc.w    $71ff,$ff00,$182,$aa0
  459.         dc.w    $72ff,$ff00,$182,$990
  460.         dc.w    $73ff,$ff00,$182,$880
  461.         dc.w    $74ff,$ff00,$182,$770
  462.         dc.w    $76ff,$ff00,$180,$000
  463.  
  464.         dc.w    $78ff,$ff00,$102
  465. mini_scroll2:    dc.w    0
  466.  
  467.         dc.w    $79ff,$ff00,$182,$880
  468.         dc.w    $180
  469. mini_colour2:    dc.w    $fff
  470.         dc.w    $7aff,$ff00,$182,$990
  471.         dc.w    $7bff,$ff00,$182,$aa0
  472.         dc.w    $7cff,$ff00,$182,$bb0
  473.         dc.w    $7dff,$ff00,$182,$cc0
  474.         dc.w    $7eff,$ff00,$182,$dd0
  475.         dc.w    $7fff,$ff00,$182,$ee0
  476.         dc.w    $80ff,$ff00,$182,$ff0
  477.         dc.w    $81ff,$ff00,$182,$ee0
  478.         dc.w    $82ff,$ff00,$182,$dd0
  479.         dc.w    $83ff,$ff00,$182,$cc0
  480.         dc.w    $84ff,$ff00,$182,$bb0
  481.         dc.w    $85ff,$ff00,$182,$aa0
  482.         dc.w    $86ff,$ff00,$182,$990
  483.         dc.w    $87ff,$ff00,$182,$880
  484.         dc.w    $88ff,$ff00,$182,$770
  485.         
  486.         dc.w    $8aff,$ff00,$180,$000
  487.         
  488.         dc.w    $9dff,$ff00,$180,$fff
  489.         dc.w    $9eff,$ff00,$180,$000
  490.     
  491.         dc.w    $ffe1,$fffe    ; wait for end of ntsc screen
  492.         dc.w    $3001,$ff00    ; wait for end of pal screen
  493.  
  494.         dc.w    $9c,$8010    ; irq set bits - re-call my interupt
  495.         dc.w    $ffff,$fffe    ; end of copper list
  496.     
  497. glib:        dc.b    "graphics.library",0
  498.     even
  499. dlib:        dc.b    "dos.library",0    
  500.     even                
  501. graphics:    dc.l    0
  502. dos:        dc.l    0
  503. count:        dc.l    0
  504. delay:        dc.l    0
  505. sine_pos:    dc.l    sine_list
  506. bounce        equ    144
  507.  
  508. screenlen    equ    46*348
  509. screen        equ    $70000
  510. ypos:        dc.l    0
  511.  
  512. lookup:        dc.l    mini_colour1
  513.         dc.l    mini_colour2
  514.  
  515. runtable:    dc.l    run1
  516.         dc.l    run2
  517.         dc.l    run3
  518.         dc.l    run4
  519.         dc.l    run5
  520.         
  521. font:        incbin    "df1:twenties.small"
  522.  
  523. text:
  524. mes1:    dc.b    "ESCAPE FROM THARKAN  ",0
  525.     dc.b    "TRAINED BY CASCADE  ",0    ; needs two lines!
  526.      
  527.  
  528. divider        equ    26  
  529.  
  530. barcolour    equ    $02F    ; colour of highlight
  531. titlebg        equ    $444    ; colour of background of title
  532.  
  533. default        equ    1    ; menu item which is selected on loading (1-5)
  534. max        equ    2    ; maxumum number of items on the menu (1-5)
  535.  
  536.                 ; run1-5
  537.                 ; commands to execute!!
  538.                 ; finish with 0
  539.                 
  540. run1:        dc.b    "game",0,0
  541.     even
  542. run2:        
  543.         dc.b    "trainer",0,0
  544.     even
  545. run3:        
  546.  
  547.         dc.b    "",0    
  548.         dc.b    "",0,0    
  549.     even
  550. run4:        
  551.         dc.b    "",0,0
  552.     even
  553. run5:        
  554.         dc.b    "",0,0
  555.     even
  556.  
  557. scroller1:    dc.b    "NORMAL GAME            ",0
  558. scroller2:    dc.b    "  TRAINER              ",0
  559.  
  560.     End
  561.